home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Tools / TRW2000 for Win9x v1.22 / PLUGSDK / S3 / S3DRV.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  2000-03-07  |  3.6 KB  |  157 lines

  1. // S3DRV Plugs for NDW 1.00 for Windows 9x
  2. // Copyright (C) , 1999 ,
  3. //
  4. // Author:
  5. //           Zhunanhao  , reached at nhzhu@163.net
  6. //
  7. // History :
  8. //           1999.4.12 , Zhunanhao write origin code .
  9. //
  10.  
  11. #include <wdm.h>
  12. #include "...\INCLUDE\PLUGS.H"
  13.  
  14. // prototypes
  15.  
  16. extern "C" NTSTATUS
  17. DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath);
  18.  
  19. VOID
  20. PLUGS_Unload(IN PDRIVER_OBJECT DriverObject);
  21.  
  22.  
  23. NTSTATUS
  24. DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
  25. {
  26.     NTSTATUS    ntStatus = STATUS_SUCCESS;
  27.  
  28.     DriverObject->DriverUnload = PLUGS_Unload;
  29.  
  30.     return ntStatus;
  31. }
  32.  
  33. VOID
  34. PLUGS_Unload(IN PDRIVER_OBJECT DriverObject)
  35. {
  36. }
  37.  
  38. /****************** WDM Rountine End ****************/
  39.  
  40. // prototype
  41.  
  42. BOOL SaveRegister ( ) ;
  43. BOOL RestoreRegister ( ) ;
  44.  
  45. // end
  46.  
  47. PLUGS_API*    api = 0 ;
  48.  
  49. EXC EXPORT BOOL Plugs_Init ( PLUGS_API* plugsapi )
  50. {
  51.     api = plugsapi ;
  52.  
  53.     api->hook( api->hh_DisplaySaveRegister , SaveRegister,0 ) ;
  54.     api->hook( api->hh_DisplayRestoreRegister, RestoreRegister , 0 ) ;
  55.  
  56.     api->dprintf ( "S3DRV Plugs Ver 0.01 Initialized..." ) ;
  57.  
  58.     return TRUE ;
  59. }
  60.  
  61. EXC EXPORT BOOL Plugs_Exit ( )
  62. {
  63.     api->unhook( api->hh_DisplaySaveRegister , SaveRegister ) ;
  64.     api->unhook( api->hh_DisplayRestoreRegister, RestoreRegister );
  65.     return TRUE ;
  66. }
  67.  
  68. /***************** Save/Restore Register ***************/
  69.  
  70. BYTE S3_Register_State[0x51] = { 0 , 0 , 0 } ;
  71. // Why we set 50H ? Because S3-special register is 30H-80H .
  72.  
  73. BOOL SaveRegister ( )
  74. {
  75.     BYTE Port_3D4_State ;
  76.  
  77.     _asm {
  78. pushad
  79.  
  80.            mov      edx,3d4h        //EDX --> CRTC index register
  81.            in       al,dx           //save current index reg value...
  82.            mov      Port_3D4_State,al
  83.  
  84.            mov      ax,4838h
  85.            out      dx,ax       //make S3 regs unlocked 30-3FH.
  86.            mov      ax,0a539h   //make S3 regs unlocked 40-80H&36H
  87.            out      dx,ax
  88.  
  89.            mov      edi,offset S3_Register_State
  90.            mov      ecx,51h
  91.            mov      ah,30h      // Begin from 30H
  92.            cld
  93.  
  94.      Save_S3_Register:
  95.  
  96.            mov      al,ah
  97.            out      dx,al
  98.            inc      edx
  99.            in       al,dx
  100.            dec      edx
  101.            stosb
  102.            inc      ah
  103.            loop     Save_S3_Register
  104.  
  105.            mov      dl,0d4h             //EDX --> CRTC index register
  106.            mov      al,Port_3D4_State   //restore CRTC index register
  107.            out      dx,al
  108.  
  109.            popad
  110.      }
  111.  
  112.      return TRUE ;
  113. }
  114.  
  115. BOOL RestoreRegister ( )
  116. {
  117.      BYTE Port_3D4_State ;
  118.  
  119.      _asm {
  120.            pushad
  121.  
  122.            mov      edx,3d4h        //EDX --> CRTC index register
  123.            in       al,dx           //save current index reg value...
  124.            mov      Port_3D4_State,al
  125.  
  126.            mov      ax,4838h
  127.            out      dx,ax           //make S3 regs unlocked 30-3FH.
  128.            mov      ax,0a539h       //make S3 regs unlocked 40-80H&36H
  129.            out      dx,ax
  130.  
  131.            mov      esi,offset S3_Register_State
  132.            mov      ecx,51h
  133.            mov      ah,30h          // Begin from 30H
  134.            cld
  135.  
  136.      Restore_S3_Register:
  137.  
  138.            mov      al,ah
  139.            out      dx,al
  140.            inc      dx
  141.            lodsb
  142.            out      dx,al
  143.            dec      dx
  144.            inc      ah
  145.            loop     Restore_S3_Register
  146.  
  147.            mov      dl,0d4h             //EDX --> CRTC index register
  148.            mov      al,Port_3D4_State   //restore CRTC index register
  149.            out      dx,al
  150.  
  151.            popad
  152.      }
  153.  
  154.      return TRUE ;
  155. }
  156.  
  157.